import json
from utils.path_processor import resource_path


class YunzaiManager:
    """Yunzai机器人实例管理器类

    Attributes:
        VERSIONS (dict): 支持的 Yunzai 版本及其 Git 仓库地址
    """

    # 定义支持的 Yunzai 版本及其对应仓库地址
    VERSIONS = {
        "TRSS-Yunzai": "https://gitee.com/TimeRainStarSky/Yunzai.git",
        "Miao-Yunzai": "https://gitee.com/yoimiya-kokomi/Miao-Yunzai.git",
        "YunzaiJS": "https://github.com/YunzaiJS/YunzaiJS.git"
    }

    def __init__(self):
        """初始化方法，加载已有的实例数据"""
        self._instances = self._load_instances()

    def _load_instances(self):
        """从 JSON 文件加载已保存的实例数据

        Returns:
            list: 包含所有已保存实例的列表，加载失败时返回空列表
        """
        try:
            # 尝试打开并读取实例数据文件
            with open(resource_path("data/instances.json")) as f:
                return json.load(f)
        except (FileNotFoundError, json.JSONDecodeError):
            # 文件不存在或 JSON 解析失败时返回空列表
            return []

    def save_instances(self):
        """将当前实例数据保存到 JSON 文件"""
        with open(resource_path("data/instances.json"), "w") as f:
            # 使用缩进格式化保存 JSON 数据
            json.dump(self._instances, f, indent=2)

    @property
    def instances(self):
        """获取所有 Yunzai 实例

        Returns:
            list: 当前管理的所有实例数据
        """
        return self._instances

    def add_instance(self, instance_data):
        """添加新的 Yunzai 实例

        Args:
            instance_data (dict): 要添加的实例信息字典
        """
        self._instances.append(instance_data)
        self.save_instances()

    def remove_instance(self, name):
        #  直接修改实例列表
        self._instances = [inst for inst in self._instances if inst["name"] != name]
        self.save_instances()
